package contenedores;


import java.io.Serializable;
import clases.Fecha;
import clases.Pago;
import pedidos.Bebida;
import pedidos.Plato;
import pedidos.TipoPlato;


/** Clase que representa una cuenta
 * @author Ane
 *
 */
public class Cuenta implements Serializable{


	private static final long serialVersionUID = 6750205821942002037L;
	private int codigoCuenta;
	private Fecha fecha;
	private int numeroMesa;
	private int numeroComensales;
	private GrupoPedidos grupoEnCuenta = new GrupoPedidos();
	private double importeTotal;
	private Pago formaPago;
	
	
	/** Constructor con parametros
	 * @param codigoCuenta El codigo de la cuenta
	 * @param fecha La fecha de la cuenta
	 * @param numeroMesa El numero de mesa
	 * @param numeroComensales El numero de comensales
	 * @param grupoPedidos Los pedidos
	 * @param importeTotal El importe total
	 * @param formaPago La forma de pago
	 */
	public Cuenta(int codigoCuenta, Fecha fecha, int numeroMesa, int numeroComensales, 
			GrupoPedidos grupoEnCuenta, double importeTotal, Pago formaPago) {
		this.codigoCuenta = codigoCuenta;
		this.fecha = fecha;
		this.numeroMesa = numeroMesa;
		this.numeroComensales = numeroComensales;
		this.grupoEnCuenta = grupoEnCuenta;
		this.importeTotal = importeTotal;
		this.formaPago = formaPago;
	}

	
	/** Devuelve el codigo de la cuenta
	 * @return codigoCuenta Codigo de la cuenta
	 */
	public int getCodigoCuenta() {
		return codigoCuenta;
	}

	/** Modifica el codigo de la cuenta
	 * @param codigoCuenta Codigo de la cuenta
	 */
	public void setCodigoCuenta(int codigoCuenta) {
		this.codigoCuenta = codigoCuenta;
	}

	/** Devuelve la fecha de la reserva
	 * @return fecha Fecha de la reserva
	 */
	public Fecha getFecha() {
		return fecha;
	}

	/** Modifica la fecha de la reserva
	 * @param fecha Fecha de la reserva
	 */
	public void setFecha(Fecha fecha) {
		this.fecha = fecha;
	}

	/** Devuelve el numero de la mesa
	 * @return numeroMesa El numero de mesa
	 */
	public int getNumeroMesa() {
		return numeroMesa;
	}

	/** Modifica el numero de la mesa
	 * @param numeroMesa El numero de mesa
	 */
	public void setNumeroMesa(int numeroMesa) {
		this.numeroMesa = numeroMesa;
	}

	/** Devuelve el numero de los comensales
	 * @return numeroComensales El numero de comensales
	 */
	public int getNumeroComensales() {
		return numeroComensales;
	}

	/** Modifica el numero de los comensales
	 * @param numeroComensales El numero de comensales
	 */
	public void setNumeroComensales(int numeroComensales) {
		this.numeroComensales = numeroComensales;
	}

	/** Devuelve el grupo de los pedidos de la cuenta
	 * @return grupoPedidos El grupo de los pedidos
	 */
	public GrupoPedidos getGrupoCuenta() {
		return grupoEnCuenta;
	}

	/** Modifica el grupo de los pedidos de la cuenta
	 * @param grupoPedidos El grupo de los pedidos
	 */
	public void setGrupoPedidos(GrupoPedidos grupoPedidos) {
		this.grupoEnCuenta = grupoPedidos;
	}

	/** Devuelve el importe total 
	 * @return importeTotal El importe total 
	 */
	public double getImporteTotal() {
		return importeTotal;
	}

	/** Modifica el importe total 
	 * @param importeTotal El importe total
	 */
	public void setImporteTotal(double importeTotal) {
		this.importeTotal = importeTotal;
	}

	/** Devuelve la forma de pago de la cuenta
	 * @return formaPago La forma de pago
	 */
	public Pago getFormaPago() {
		return formaPago;
	}

	/** Modifica la forma de pago de la cuenta
	 * @param formaPago La forma de pago
	 */
	public void setFormaPago(Pago formaPago) {
		this.formaPago = formaPago;
	}


	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	public String toString() {
		return "Cuenta [Codigo de cuenta: " + codigoCuenta + ", Fecha: " + fecha
				+ ", Numero de mesa: " + numeroMesa + ", Numero de comensales: "
				+ numeroComensales + ", Grupo pedidos: "
				+ grupoEnCuenta.toString() + ", Importe total: "
				+ importeTotal + "y forma de pago: " + formaPago + "]";
	}	
	
	
	/** Metodo que visualiza la cuenta
	 * 
	 */
	public void visualizar(){
		System.out.println ("Codigo de cuenta: "+codigoCuenta+ " Fecha: "+fecha);
		System.out.println ("Numero de mesa: "+numeroMesa+" Numero comensales: "+numeroComensales);
		System.out.println ("**********************************");
		grupoEnCuenta.visualizar();
		System.out.println ("Importe total: "+importeTotal);
		System.out.println ("Forma de pago: "+formaPago); 
	}
	
	
	/** main de prueba
	 * @param s Parametros estandar (no se utilizan)
	 */
	public static void main (String[] s){
		
		// PRUEBAS REALIZADAS
		Fecha f= new Fecha (20, 11, 2011);
		GrupoPedidos grupoCuenta = new GrupoPedidos();
		grupoCuenta.add (new Plato (10, "Fritos variados", TipoPlato.Entrante, 6.50));
		grupoCuenta.add (new Plato (7, "Foiet en terrina", TipoPlato.Entrante, 8.20));
		grupoCuenta.add (new Bebida (251, "Cresta Rosa", 9.90, 2006));
		grupoCuenta.add (new Bebida (230, "Agua 1.5L", 2.80, 2007));
		grupoCuenta.add(new Plato (15, "Ensalada de bogavante", TipoPlato.Primero, 12));
		Cuenta cuenta = new Cuenta(1, f, 2, 2, grupoCuenta, 0, Pago.Efectivo);
		cuenta.importeTotal = grupoCuenta.sumaPrecios();
		cuenta.visualizar();
	
	}
	
	
}
